package com.weichen.studentgameexchange.message.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.weichen.studentgameexchange.common.enums.MessagePriority;
import com.weichen.studentgameexchange.common.enums.MessageStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * 
 * </p>
 *
 * @author 惟尘
 * @since 2025-02-08
 */
@Getter
@Setter
@ToString
@TableName("message")
@Schema(name = "Message对象", description = "")
public class Message implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 消息ID，主键，唯一标识一条消息
     */
    @Schema(description = "消息ID，主键，唯一标识一条消息")
    @TableId(value = "message_id", type = IdType.AUTO)
    private Long messageId;

    /**
     * 发送者ID，关联用户表（studentgameexchange-user.user.user_id）
     */
    @TableField("sender_id")
    @Schema(description = "发送者ID，关联用户表（studentgameexchange-user.user.user_id）")
    private Long senderId;

    /**
     * 接收者ID，关联用户表（studentgameexchange-user.user.user_id）
     */
    @TableField("receiver_id")
    @Schema(description = "接收者ID，关联用户表（studentgameexchange-user.user.user_id）")
    private Long receiverId;

    /**
     * 消息类型ID，关联消息类型表（message_type.type_id）
     */
    @TableField("type_id")
    @Schema(description = "消息类型ID，关联消息类型表（message_type.type_id）")
    private Long typeId;

    /**
     * 关联的业务ID（允许为NULL，表示无关联）
     */
    @TableField("related_id")
    @Schema(description = "关联的业务ID（允许为NULL，表示无关联）")
    private Long relatedId;

    /**
     * 消息标题
     */
    @TableField("title")
    @Schema(description = "消息标题")
    private String title;

    /**
     * 消息内容
     */
    @TableField("content")
    @Schema(description = "消息内容")
    private String content;

    /**
     * 消息发送时间
     */
    @TableField("send_time")
    @Schema(description = "消息发送时间")
    private LocalDateTime sendTime;

    /**
     * 阅读状态（0-未读，1-已读）
     */
    @TableField("read_status")
    @Schema(description = "阅读状态（0-未读，1-已读）")
    private MessageStatus readStatus;

    /**
     * 优先级（0-普通，1-重要，2-紧急）
     */
    @TableField("priority")
    @Schema(description = "优先级（0-普通，1-重要，2-紧急）")
    private MessagePriority priority;

    /**
     * 消息过期时间（超过此时间不再显示）
     */
    @TableField("expiry_time")
    @Schema(description = "消息过期时间（超过此时间不再显示）")
    private LocalDateTime expiryTime;

    /**
     * 逻辑删除（0-正常，1-已删除）
     */
    @TableField("deleted")
    @Schema(description = "逻辑删除（0-正常，1-已删除）")
    private Integer deleted;
}
